//
//  BaseEntity.h
//  LotteryClient
//
//  Created by SunYu on 14-2-6.
//  Copyright (c) 2014年 SunYu. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "NSObject+BaseFramework.h"
#import "BaseType.h"
#import "Base.h"

@protocol TableCellEntityModel <NSObject>

@optional
- (void)clickedInModelEntityModelCell;

@end


@interface BaseEntity : Base <NSCoding>
{
	NSString *_sourceString;
	NSMutableDictionary *_propertyNameAndTypeDic;

}

AS_STATIC_PROPERTY_INT(baseType)

+ (instancetype)loadObjectFromFileWithFileName:(NSString *)fileName withPath:(NSString *)path;

+ (instancetype)loadObjectFromUserDefaultWithKey:(NSString *)key;

@property (nonatomic,readonly) NSString *sourceString;

/**
 *  使用一个json或者dic初始化自身
 *
 *  @param sourceString json或者dic
 *
 *  @return self
 */
- (id)initWithSourceString:(id)sourceString;

/**
 *  将一个json或者dic中的值 赋值给自身属性
 *
 *  @param content json或者dic
 */
- (void)resetAllVarsByContent:(id)content;


/**
 *  将另一个相同实体中的属性值 赋给自身属性
 *
 *  @param object 另一个对象
 */
- (void)copyPropertyValueFromObject:(id)object;


#pragma mark- 需要子类复写
/**
 *  在此方法中做名称转换，类中属性名称与json或dic中的Key转换
 *
 *
 *  @return NSDictionary(key为json或者dic中的key值，value为属性值)
 */
- (NSDictionary *)nameSwitchDictionary;

/**
 *  如果json中含有数组，并且josn数组中的每一项都是一个dic
 *  每一个dic对应object-c中一个对象
 *  @return NSDictionary（key为json数组名称，valueobject-c中一个class）
 */
- (NSDictionary *)objectTypeInJsonArrayDictionary;
/*!
 *  将实体类的属性和值转换为dictionary
 *  dictionary 用于生成JSON，当且仅当需要生成的json中的某一个key与实体类的属性名称不一致时需要复写该方法
 *
 *  @return 实体类的属性和值转换为dictionary
 */
- (NSDictionary *)dictionaryForJson;


- (void)saveToFileWithFileName:(NSString *)fileName withPath:(NSString *)path;

- (void)saveToUserDefaultForKey:(NSString *)key;

- (NSDictionary *)dictionaryWithNameAndValue;

@end
